public abstract class Account
{
	String name;
	double balance;
	double anualInterestRate;
	double monthlyInterestRate;
	Account overFlowAccount;
	Account underFlowAccount;
	Account interestRecievingAccount; // most likely this
	double lowThreshold;
	double highThreshold;

	// Abstract Methods -- Override in subclass to determine account behavior
	public abstract void deposit(double amount);

	public abstract double withdraw(double amount) throws IllegalStateException;

	// use to generate interest, transfer balances, etc.
	public abstract void doTimeTick();

	// Accessors And Mutators
	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public double getBalance()
	{
		return balance;
	}

	public void setBalance(double balance)
	{
		this.balance = balance;
	}

	public double getInterestRate()
	{
		return anualInterestRate;
	}

	public void setInterestRate(double interestRate)
	{
		this.anualInterestRate = interestRate;
		this.monthlyInterestRate = interestRate / 12;
	}

	public Account getOverFlowAccount()
	{
		return overFlowAccount;
	}

	public void setOverFlowAccount(Account overFlowAccount)
	{
		this.overFlowAccount = overFlowAccount;
	}

	public Account getUnderFlowAccount()
	{
		return underFlowAccount;
	}

	public void setUnderFlowAccount(Account underFlowAccount)
	{
		this.underFlowAccount = underFlowAccount;
	}

	public Account getInterestRecievingAccount()
	{
		return interestRecievingAccount;
	}

	public void setInterestRecievingAccount(Account interestRecievingAccount)
	{
		this.interestRecievingAccount = interestRecievingAccount;
	}

	public double getLowThreshold()
	{
		return lowThreshold;
	}

	public void setLowThreshold(double lowThreshold)
	{
		this.lowThreshold = lowThreshold;
	}

	public double getHighThreshold()
	{
		return highThreshold;
	}

	public void setHighThreshold(double highThreshold)
	{
		this.highThreshold = highThreshold;
	}

}
